Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / tests / frontend / NotificationBell.test.js

Displaying Raw • Download


tests/frontend/NotificationBell.test.js ca36d082fdf638f9b4ba25b7e0eddc94cd66f6db (ca36d082) Text, 6.25 KB

Tff7b72import Tb4b4b4{ Te6edf3mount Tb4b4b4} Tff7b72from Ta5d6ff"@vue/test-utils"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3itTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3viTb4b4b4, Te6edf3beforeEachTb4b4b4, Te6edf3afterEach Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Te6edf3NotificationBell Tff7b72from Ta5d6ff"@/components/NotificationBell.vue"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3nextTick Tb4b4b4} Tff7b72from Ta5d6ff"vue"Tb4b4b4;

Te6edf3describeTb4b4b4(Ta5d6ff"NotificationBell.vue"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72let Te6edf3axiosMockTb4b4b4;

Te6edf3beforeEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3axiosMock Tff7b72= Tb4b4b4{
Te6edf3getTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff0Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3postTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{ Te6edf3dataTff7b72: Tb4b4b4{Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3axios Tff7b72= Te6edf3axiosMockTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3afterEachTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72delete Tffa657windowTb4b4b4.Te6edf3axiosTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3mountNotificationBell Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72return Te6edf3mountTb4b4b4(Te6edf3NotificationBellTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3TeleportTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3directivesTff7b72: Tb4b4b4{
Ta5d6ff"click-outside"Tff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"displays '9+' when unread count is greater than 9"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueOnceTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff15Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountNotificationBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3wrapperTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"9+"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"handles long notification names with truncation"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3longName Tff7b72= Ta5d6ff"A"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"hash1"Tb4b4b4,
Te6edf3display_nameTff7b72: Te6edf3longNameTb4b4b4,
Te6edf3updated_atTff7b72: Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"Short content"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountNotificationBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Open dropdown
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3nameElement Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff".truncate"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3nameElementTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3nameElementTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3longNameTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3nameElementTb4b4b4.Te6edf3attributesTb4b4b4(Ta5d6ff"title"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3longNameTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"handles long notification content with line-clamp"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3longContent Tff7b72= Ta5d6ff"B"Tb4b4b4.Te6edf3repeatTb4b4b4(T79c0ff500Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"hash1"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"User"Tb4b4b4,
Te6edf3updated_atTff7b72: Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3contentTff7b72: Te6edf3longContentTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountNotificationBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Open dropdown
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3contentElement Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff".line-clamp-2"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3contentElementTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3contentElementTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3longContentTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3contentElementTb4b4b4.Te6edf3attributesTb4b4b4(Ta5d6ff"title"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3longContentTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"handles a large number of notifications without crashing"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3manyNotifications Tff7b72= Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Tb4b4b4{ Te6edf3lengthTff7b72: T79c0ff50 Tb4b4b4}Tb4b4b4, Tb4b4b4(Te6edf3_Tb4b4b4, Te6edf3iTb4b4b4) Tb4b4b4=> Tb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"lxmf_message"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff`Ta5d6ffhashTffd700${Te6edf3iTffd700}Ta5d6ff`Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff`Ta5d6ffUser Tffd700${Te6edf3iTffd700}Ta5d6ff`Tb4b4b4,
Te6edf3updated_atTff7b72: Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff`Ta5d6ffMessage Tffd700${Te6edf3iTffd700}Ta5d6ff`Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Te6edf3manyNotificationsTb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff50Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountNotificationBellTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Open dropdown
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// The buttons are v-for="notification in notifications"
T8b949e// Let's find them by class .w-full and hover:bg-gray-50 which are on the same element
Tff7b72const Te6edf3notificationButtons Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findAllTb4b4b4(Ta5d6ff"div.overflow-y-auto button.w-full"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3notificationButtonsTb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Te6edf3itTb4b4b4(Ta5d6ff"navigates to voicemail tab when voicemail notification is clicked"Tb4b4b4, Tff7b72async Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3routerPush Tff7b72= Te6edf3viTb4b4b4.Te6edf3fnTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3axiosMockTb4b4b4.Te6edf3getTb4b4b4.Te6edf3mockResolvedValueTb4b4b4(Tb4b4b4{
Te6edf3dataTff7b72: Tb4b4b4{
Te6edf3notificationsTff7b72: Tb4b4b4[
Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"telephone_voicemail"Tb4b4b4,
Te6edf3destination_hashTff7b72: Ta5d6ff"hash1"Tb4b4b4,
Te6edf3display_nameTff7b72: Ta5d6ff"User"Tb4b4b4,
Te6edf3updated_atTff7b72: Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toISOStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff"New voicemail"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Te6edf3unread_countTff7b72: T79c0ff1Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72const Te6edf3wrapper Tff7b72= Te6edf3mountTb4b4b4(Te6edf3NotificationBellTb4b4b4, Tb4b4b4{
Tffa657globalTff7b72: Tb4b4b4{
Te6edf3mocksTff7b72: Tb4b4b4{
Te6edf3$tTff7b72: Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3keyTb4b4b4,
Te6edf3$routerTff7b72: Tb4b4b4{ Te6edf3pushTff7b72: Te6edf3routerPush Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3stubsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTff7b72: Tff7b72trueTb4b4b4,
Te6edf3TeleportTff7b72: Tff7b72trueTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3directivesTff7b72: Tb4b4b4{
Ta5d6ff"click-outside"Tff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;

Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Click bell to open dropdown
Tff7b72await Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"button"Tb4b4b4)Tb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3nextTickTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Click it
Tff7b72const Te6edf3button Tff7b72= Te6edf3wrapperTb4b4b4.Te6edf3findTb4b4b4(Ta5d6ff"div.overflow-y-auto button.w-full"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3buttonTb4b4b4.Te6edf3existsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3buttonTb4b4b4.Te6edf3triggerTb4b4b4(Ta5d6ff"click"Tb4b4b4)Tb4b4b4;

Te6edf3expectTb4b4b4(Te6edf3routerPushTb4b4b4)Tb4b4b4.Te6edf3toHaveBeenCalledWithTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"call"Tb4b4b4,
Te6edf3queryTff7b72: Tb4b4b4{ Te6edf3tabTff7b72: Ta5d6ff"voicemail" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────